input outputの解説

リダイレクタ tee echo read

 

input-output

Solarisは、unixと高い互換性をもったOSであることは、言うまでもないことでありますが、UNIXの入出力機構を説明することでSolarisのinput-outputを説明していきたいと思います。

UNIXは、2つのすばらしいアイデアでこれらを作り上げている。

unixは、任意のinput-outputが文字列を使うことです。

システム上でデーターを生成する、受け取るなどのがすべて、fileとして扱われるのです。

たとえば、CPUから見ると、キーボード、CRT、FDD、HDD、CD-ROM、DT、MO、PD、パンチカード、PRINTER、etc.などは、input-outputで行うことができるようになっているのです。

standard input-output

基本的な入出力口は、決まっている。

standard input 共通の入力の受け口は、キーボード、(パンチカード)になっています。

standard output 共通の出力口は、画面、(printer)になっています。

standard error output 共通の出力口は、画面、(printer)になっています。

リダイレクション

標準の入出力口からさっき上げたような色々な装置への出し入れを行う場合スイッチを切り替えれば、そちらに入るような感覚で行えることです。

たとえは、CRTへの標準出力をリダイレクションしてfileへ落し保管するとか、FDD or HDDから入力したのをCRTに吐き出すのはキーボードから入力する変わりにそれらに切り替えただけで行えるのです。

そのような、リダイレクト効果のあるものを下記の表に書いてみた。

入出力リダレクタ表

リダイレクタ n,m(0-9) 機能説明
> file fileへ標準出力切り替える。(1>は、>に省略)
< file fileから標準入力取り出す。(commandでは省略されることがある)(0<は、<に省略)
n>! file ファイルデスクリプタnの標準出力をfileへ強制する。(noclobleberの設定無視)
>> file fileへ標準出力切り替える。(fileがある場合追加する)
>! file fileへ標準出力を強制する。(noclobleberの設定無視)
n>! file ファイルデスクリプタnの標準出力をfileへ強制する。(noclobleberの設定無視)
<> file fileを標準出力、入力として使用する。
n<> file ファイルデスクリプタnの標準出力、入力としてfileを使用する。

<< label

ヒアドキュメント 別途説明
n> file ファイルデスクリプタnをfileへ切り替える。 (1>は、>に省略)
n< file ファイルデスクリプタnとして、fileを設定する。(0<は、<に省略)
n>> file ファイルデスクリプタnをfileへ切り替える。(fileがある場合追加する)
n>& 標準出力をファイルデスクリプタnに複製する。
n<& 標準入力をファイルデスクリプタnから複製する。
n>&m ファイルデスクリプタnを出力ファイルデスクリプタmのコピーにする。
n<&m ファイルデスクリプタnを入力ファイルデスクリプタmのコピーにする。
&> file 標準出力および、標準エラー出力をfileに切り替える。
>&- 標準出力を停止す。
<&- 標準入力を停止する。
n>&- ファイルデスクリプタnからの出力を停止する。
n<&- ファイルデスクリプタnからの入力を停止する。
com1 | com2 パイプ com1標準出力からcom2標準入力へ送る。 別途説明

パイプライン

そのなの通りそのまま流す働きをするものです。

コマンドの結果を次のコマンドへ送り込みます。

例)

# pkhinfo | grep SMC

パッキングされているfileをすべて標準出力し結果をgrepへ標準入力しSMCに該当するもののみ標準出力画面へ書き出す。

例)

cut -d: -f1 /etc/password | sort

この処理は、passwordのfileからコロンで区切られる-d: フィールドの先頭-f1 標準出力で取り出し結果をsortへ標準入力す。sortは、並び替えて画面へ標準出力する処理になっている。


補足説明: tee T字路

標準入力を取り出して、それを標準および引数指定したファイルにコピーするものです。

-a オプション 現在あるdatafileの末尾に追加する。

例)

fileを並べ替えてno.を付けてnfileに出力するファイルを印刷もするように変更しようとします。

sort file | cat -n > nfile -> ダメ sort | cat -n nfile | lpr

もうnfileに書き出した所でfileがなくなっています。

sort file | cat -n >nfile -> sort file | cat -n | tee nfile | lpr

teeを使うことで両方に書き出すことができました。

no.をつけない場合は、

sort file | cat -n >nfile -> sort file | tee nfile | cat -n | lpr

となります。


ヒアドキュメント

記号の全体的な解釈からすると、<< labelは、コマンドへの標準入力として処理されるますが、実際の処理は、若干違います。labelで表された。文字列が入力されるまで、入力を受け付けるようになります。

例)

mail mark << good-bye

Hallow Mr. spaceforce.

Are you fine?

good-bye

good-byeまで入力を続ける。一度書きみたいなものかも。

本人あまり良く理解してないので、また書きます。

ファイルディスクリプタ

上の表の中で、n,m,で示された記号は、一晩的にディスクリといわれ、プロセスの特定データーの流れを示している。

0 = 標準入力

1 = 標準出力

2 = 標準エラー出力

は、さっきも上で説明したものの記号化されたものである。

3以降は、利用可能なディスクリブタが割り当てられるようになっている。

例)

cat nofile 2> file

catでnofileが見つからない場合標準errorメッセージがfileに入る。

例)

"@$" > logfile 2>&1

コマンドがlogfileに標準出力されてから、結果2標準error出力を1標準出力へコピーしている処理になっています。

例)

"@$" 2>&1 | tree logfile

上と同じ処理だか、パイプに標準出力させて、その結果をteeを使ってlogfileに書き込んでいる。

echo出力

知らない人いないと思うけど呼べば答えるものです。引数を標準出力へ書き出します。

echoオプション

オプション 機能
-e

バックシュラッシュエスケープされた文字が解釈されるようにする。

-E
デフォルトです。 バックシラッシュエスケープされた文字が解釈されません。
-n
最後の改行を省略します(\cと同じ)

バックシュラッシュエスケープ

シーケンス
(\がバックスラッシュ)

書き出される記号
\a
ALERTあるいは、CTRL-G(警告音)
\b
BACKSPARCEあるいは、CTRL-H
\c
最後のNEWLINE(改行)の省略
\E
エスケープ記号
\f
FORMFEEDかCTRL-L(コマンドの終わりでない)NEWLINEあるいはCTRL-J 処理が若干装置依存する
\r

RETURN(ENTER)あるいは、CTRL-M

\t
TABあるいはCTRL-I
\v
VERTICAL TAB あるいはCTRL-K あまり使われない
\n
8進数nのASCII文字。3桁まで
\\
バックシュラッシ一つだけ
read 入力

これを知らない人もあまりいないでしょうが、これを使用することでシェル内に値を読み込むことができます。

構文は、

read [-r] var1 var2 var3

 

このバッシュには、行単位の処理が可能になっている。

後は良くわからないのです。

Last edit was Tuesday, 06/18/2002 <back> <top>

 

 

 

PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル